package com.chenjt.springai.nine_rag.tools;

import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.chenjt.springai.nine_rag.entity.po.Course;
import com.chenjt.springai.nine_rag.entity.po.CourseReservation;
import com.chenjt.springai.nine_rag.entity.po.School;
import com.chenjt.springai.nine_rag.entity.query.CourseQuery;
import com.chenjt.springai.nine_rag.service.ICourseReservationService;
import com.chenjt.springai.nine_rag.service.ICourseService;
import com.chenjt.springai.nine_rag.service.ISchoolService;
import lombok.RequiredArgsConstructor;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 注释：
 *
 * @author chenjt
 * @date 2025/5/29 15:31
 */
@RequiredArgsConstructor
@Component
public class CourseTools {

    private final ICourseService courseService;
    private final ISchoolService schoolService;
    private final ICourseReservationService reservationService;


    @Tool(description = "根据条件查询课程")
    public List<Course> queryCourse(@ToolParam(description = "查询的条件") CourseQuery query){
        if(query == null){
            return courseService.list();
        }

        QueryChainWrapper<Course> wrapper = courseService.query()
                .eq(query.getType() != null, "type", query.getType()) // type='编程'
                .eq(query.getEdu() != null, "edu", query.getEdu());// edu <= 2

        if(query.getSorts() != null && !query.getSorts().isEmpty()){
            for(CourseQuery.Sort sort : query.getSorts()){
                wrapper.orderBy(true,sort.getAsc(),sort.getField());
            }
        }

        return wrapper.list();
    }


    @Tool(description = "查询所有校区")
    public List<School> querySchool(){
        return schoolService.list();
    }


    @Tool(description = "生成预约单，返回预约单号")
    public Integer createCourseReservation( @ToolParam(description = "预约课程") String course,
                                            @ToolParam(description = "预约校区") String school,
                                            @ToolParam(description = "学生姓名") String studentName,
                                            @ToolParam(description = "联系电话") String contactInfo,
                                            @ToolParam(description = "备注",required = false) String remark
                                           ){

        CourseReservation reservation = new CourseReservation();
        reservation.setCourse(course);
        reservation.setSchool(school);
        reservation.setStudentName(studentName);
        reservation.setContactInfo(contactInfo);
        reservation.setRemark(remark);

        reservationService.save(reservation);

        return reservation.getId();

    }


}
